package com.qst.order.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 订单明细表实体类
 * 对应数据库表：t_order_item
 */
@Data
@TableName("t_order_item")
public class OrderItem {

    /**
     * 明细ID（主键，自增）
     */
    @TableId(type = IdType.AUTO)
    private Long itemId;


    /**
     * 订单明细编号（唯一标识）
     */
    @TableField("item_no")
    private String itemNo;
    /**
     * 关联订单主表ID
     */
    @TableField("order_id")
    private Integer orderId;

    /**
     * 商品ID（关联商品表）
     */
    @TableField("product_id")
    private Integer productId;

    /**
     * 商品名称（冗余存储，避免商品表修改后订单信息变化）
     */
    @TableField("product_name")
    private String productName;

    /**
     * 商品规格（JSON格式，如{"颜色":"红色","尺寸":"XL"}）
     */
    @TableField(value = "specs",typeHandler = JacksonTypeHandler.class,jdbcType = JdbcType.OTHER)
    private Map<String, String> specs;  // 实际项目中可使用Map<String, Object>并配合JSON序列化注解


    /**
     * 商家ID（关联商家表）
     */
    private Integer merchantId;

    /**
     * 购买数量
     */
    @TableField("quantity")
    private Integer quantity;

    /**
     * 商品单价（下单时的价格）
     */
    @TableField("unit_price")
    private BigDecimal unitPrice;

    /**
     * 商品图片（下单时的价格）
     */
    @TableField("image")
    private String image;

    private String itemStatus;  // 订单明细状态  pending_ship: 待发货  shipped:
    // 已发货(商家已打包并交给物流)  delivered: 已送达(用户已签收) refunded: 已退款


    private LocalDateTime shipTime;// 发货时间

    private LocalDateTime deliverTime;//送达时间



    private String merchantOperatedTime;//商家操作时间

    private String logisticsNo;//物流单号

    private String logisticsCompany;//物流公司

    private String remark;

    /**
     * 商品总价（单价×数量）
     */
    @TableField("total_price")
    private BigDecimal totalPrice;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 逻辑删除（0-未删，1-已删）
     */
    @TableLogic
    @TableField("is_deleted")
    private Integer isDeleted;

    @TableField(exist = false)
    private Merchant merchant;

    // 关联的订单信息
    @TableField(exist = false)
    private Order order;

    // 关联的用户地址信息
    @TableField(exist = false)
    private UserAddress userAddress;



}
    